Le 26 mars 2018

Introduction

Ce cours est un TD informatique constitue d'exemples et d'exercices du langage de programmation R sur la data visualisation. Les differents points abordes durant ces 15 heures de cours sont :

  • Extraction et manipulation des donnees (data mining)
  • Representations graphiques
  • Valorisations de ces donnees par le biais de methodes statistiques et de visualisations
  • Representations graphiques interactives (html widget, plotly …)
  • Shiny et R markdown creation d'application et de rapport interactif

\(1^{er}\) cours

Extraction et manipulation de donn?es (data mining)

  • G?n?ralit? sur la data visualisation
  • Rappels sur R
  • Objets R (variable, programme et fonction)
  • importer des donn?es depuis le web
  • graphiques simples

Data visualation

Definition

  • communique des donnees de facon visuelle

  • transformer des donnees en information

  • resultats graphiques clairs et comprehensibles

Exemple

Principes d'infographie

  • memoire courte quelques secondes d'attention ou de reflexion
  • un max de \(\simeq 11\) types de couleurs ou de styles diff?rents facilement distinguables
  • notion de perspective donn?es et v?rit?s

  • source "How to Lie With Statistics", 1954, Huff

Science sous jacente les statistiques

source "How to Lie With Statistics", 1954, Huff

Un graphique vaut mille mots

Combien y a t il de A ?

  • R?ponse : 9

Pourquoi R

  • Open source & Gratuit
  • Facile ? installer sur les syst?mes d'exploitations Linux, Windows et Apple
  • Une tr?s grosse communaut? de d?veloppeurs et d'utilisateurs
  • Facile ? utiliser pour des non-programmeurs pour des calculs statistiques
  • Possibilit? de cr?er de belles illustrations, applications web et m?me la pr?sentation que vous lisez actuellement

Installation de R

Pour ?tre bon en R …

  • savoir demander de l'aide la qualit? principale d'un programmeur (90% de ses comp?tences)

  • stack overflow forum en ligne
  • suivre des exemples R blogger, git_hub …
  • commandes en console R ?? et ?
  • utiliser un environnement de travail int?gr? (IDE) comme Rstudio (facilite la programmation, auto indentation, variables historiques, etc …)

Pr?sentation de Rstudio

Codes sources, programmes et scripts

Codes sources, programmes et scripts

  • cr?er un fichier texte hello.R
  • ?crire votre premier programme en R
#  le Di?se sert ? commenter le reste de la la ligne  
# tout ce qui est ?crit ici ne sera pas ex?cut? par R  
# indiquer le but du programme ou toutes autres informations  
# Nom  et Pr?nom dates 
a <- "hello World ! "

print(a)

Comment l'ex?cuter ?

A l'aide de la console R :

source("cours_data_visualisation//hello.R")
## [1] "hello World ! "

L'environnement de R

Ce qui a chang?

  • Ajout de la commande lanc?e dans la console R dans l'historique
  • Ajout de la variable a dans l'environnement R (commande ls() pour lister les objets)

Les variables dans R

class(a)
## [1] "character"
b <- 1 
class(b)
## [1] "numeric"
#vecteurs
c <- c(1,2,3,4)
d <- c("a","b","c","d")
e <- c("a"=1,"b"=2,"c"=3,"d"=4)
f <- c(1,"a","d",4)

Les variables dans R suite

class(c)
## [1] "numeric"
class(d)
## [1] "character"
class(e)
## [1] "numeric"
class(f)
## [1] "character"

attention f ne pas m?langer les types de variables

Les Matrices

  f.m <- cbind(f)
f.m
##      f  
## [1,] "1"
## [2,] "a"
## [3,] "d"
## [4,] "4"
  c.m <- cbind(c)
  c.m
##      c
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4

Matrices num?riques ou caract?res

  m.m <- cbind(f.m,c.m)
    m.m
##      f   c  
## [1,] "1" "1"
## [2,] "a" "2"
## [3,] "d" "3"
## [4,] "4" "4"
        n.m <- cbind(c.m,c.m)
        n.m
##      c c
## [1,] 1 1
## [2,] 2 2
## [3,] 3 3
## [4,] 4 4

Limitation des matrices soit type num?rique ou caract?re

Matrices et Data frames

mat <- matrix(data = c.m, ncol=4,nrow = 3)
mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    3    2
## [2,]    2    1    4    3
## [3,]    3    2    1    4
df = data.frame("numeriques"= c, lettres=f,stringsAsFactors = F)
df 
##   numeriques lettres
## 1          1       1
## 2          2       a
## 3          3       d
## 4          4       4

Matrices et Data frames

class(mat[,1])
## [1] "numeric"
class(df[,"numeriques"])
## [1] "numeric"
class(df[,"lettres"])
## [1] "character"

Passer d'un type ? l'autre

as.matrix(df)
##      numeriques lettres
## [1,] "1"        "1"    
## [2,] "2"        "a"    
## [3,] "3"        "d"    
## [4,] "4"        "4"
as.numeric(f)
## Warning: NAs introduits lors de la conversion automatique
## [1]  1 NA NA  4

Relation logique

1==0
## [1] FALSE
1>=0
## [1] TRUE
1<=0
## [1] FALSE
"a" == "b"
## [1] FALSE

Fonctions

les commandes matrix(), cbind(), data.frame() sont des fonctions cod?es

D?finition

  • un objet R
  • des commandes R ?crites dans un fichier qui effectuent une t?che pr?d?finie
  • permet de faire automatiquement la m?me t?che plusieurs fois
  • garder un programme plus lisible
  • un gain de temps ? long terme

Ecrire votre premi?re fonction

?crire le m?me code que pr?c?demment sous forme de fonction dans un nouveau fichier hello_fun.R

hello <-function(texte=NULL){   # argument ou donn?es d'entr?e

  #code manipulant les donn?es d'entr?e
 
return(texte)  #  return  renvoie le r?sultat de la fonction  
}
 source("cours_data_visualisation/hello_fun.R")

 hello("hello world !")
## [1] "hello world !"

Un peu plus complique

un petit ajout le nom de l'utilisateur

hello <-function(texte=NULL){  
  #on souhaite coller le nom de l'utilisateur ? "hello world"
  # on r?cup?re le nom de l'utilisateur 
 nom <- Sys.getenv("USERNAME") # fonction trouv?e via une recherche web
   # on colle le nom de l'utilisateur
 texte <- paste(nom,texte)
 
return(texte)  #  return  renvoie le r?sultat de la fonction  
}

 source("cours_data_visualisation/hello_fun2.R")

 hello("hello world !")
## [1] "Laurent hello world !"

Fonction cor()

Vous avez ?crit une fonction comme les fonctions de base de R exemple cor() qui calcule la corr?lation des donn?es de 2 vecteurs ou des donn?es contenues dans une matrice

cor
## function (x, y = NULL, use = "everything", method = c("pearson", 
##     "kendall", "spearman")) 
## {
##     na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
##         "everything", "na.or.complete"))
##     if (is.na(na.method)) 
##         stop("invalid 'use' argument")
##     method <- match.arg(method)
##     if (is.data.frame(y)) 
##         y <- as.matrix(y)
##     if (is.data.frame(x)) 
##         x <- as.matrix(x)
##     if (!is.matrix(x) && is.null(y)) 
##         stop("supply both 'x' and 'y' or a matrix-like 'x'")
##     if (!(is.numeric(x) || is.logical(x))) 
##         stop("'x' must be numeric")
##     stopifnot(is.atomic(x))
##     if (!is.null(y)) {
##         if (!(is.numeric(y) || is.logical(y))) 
##             stop("'y' must be numeric")
##         stopifnot(is.atomic(y))
##     }
##     Rank <- function(u) {
##         if (length(u) == 0L) 
##             u
##         else if (is.matrix(u)) {
##             if (nrow(u) > 1L) 
##                 apply(u, 2L, rank, na.last = "keep")
##             else row(u)
##         }
##         else rank(u, na.last = "keep")
##     }
##     if (method == "pearson") 
##         .Call(C_cor, x, y, na.method, FALSE)
##     else if (na.method %in% c(2L, 5L)) {
##         if (is.null(y)) {
##             .Call(C_cor, Rank(na.omit(x)), NULL, na.method, method == 
##                 "kendall")
##         }
##         else {
##             nas <- attr(na.omit(cbind(x, y)), "na.action")
##             dropNA <- function(x, nas) {
##                 if (length(nas)) {
##                   if (is.matrix(x)) 
##                     x[-nas, , drop = FALSE]
##                   else x[-nas]
##                 }
##                 else x
##             }
##             .Call(C_cor, Rank(dropNA(x, nas)), Rank(dropNA(y, 
##                 nas)), na.method, method == "kendall")
##         }
##     }
##     else if (na.method != 3L) {
##         x <- Rank(x)
##         if (!is.null(y)) 
##             y <- Rank(y)
##         .Call(C_cor, x, y, na.method, method == "kendall")
##     }
##     else {
##         if (is.null(y)) {
##             ncy <- ncx <- ncol(x)
##             if (ncx == 0) 
##                 stop("'x' is empty")
##             r <- matrix(0, nrow = ncx, ncol = ncy)
##             for (i in seq_len(ncx)) {
##                 for (j in seq_len(i)) {
##                   x2 <- x[, i]
##                   y2 <- x[, j]
##                   ok <- complete.cases(x2, y2)
##                   x2 <- rank(x2[ok])
##                   y2 <- rank(y2[ok])
##                   r[i, j] <- if (any(ok)) 
##                     .Call(C_cor, x2, y2, 1L, method == "kendall")
##                   else NA
##                 }
##             }
##             r <- r + t(r) - diag(diag(r))
##             rownames(r) <- colnames(x)
##             colnames(r) <- colnames(x)
##             r
##         }
##         else {
##             if (length(x) == 0L || length(y) == 0L) 
##                 stop("both 'x' and 'y' must be non-empty")
##             matrix_result <- is.matrix(x) || is.matrix(y)
##             if (!is.matrix(x)) 
##                 x <- matrix(x, ncol = 1L)
##             if (!is.matrix(y)) 
##                 y <- matrix(y, ncol = 1L)
##             ncx <- ncol(x)
##             ncy <- ncol(y)
##             r <- matrix(0, nrow = ncx, ncol = ncy)
##             for (i in seq_len(ncx)) {
##                 for (j in seq_len(ncy)) {
##                   x2 <- x[, i]
##                   y2 <- y[, j]
##                   ok <- complete.cases(x2, y2)
##                   x2 <- rank(x2[ok])
##                   y2 <- rank(y2[ok])
##                   r[i, j] <- if (any(ok)) 
##                     .Call(C_cor, x2, y2, 1L, method == "kendall")
##                   else NA
##                 }
##             }
##             rownames(r) <- colnames(x)
##             colnames(r) <- colnames(y)
##             if (matrix_result) 
##                 r
##             else drop(r)
##         }
##     }
## }
## <bytecode: 0x0000000011a9c7d8>
## <environment: namespace:stats>

Importer des donn?es

Importer des donn?es sous R

Import Dataset > from Local File

Puis v?rifier que les donn?es sont sous le bon format

Importer des donn?es sous console R

read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv")
##          Date  Value
## 1  2012-12-31 149017
## 2  2011-12-31 148803
## 3  2010-12-31 147571
## 4  2007-12-31 151108
## 5  2006-12-31 152337
## 6  1999-12-31 151279
## 7  1990-12-31 141404
## 8  1982-12-31 136038
## 9  1975-12-31 137591
## 10 1968-12-31 128557
## 11 1962-12-31 115273
class(read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv"))
## [1] "data.frame"

Visualiser les donn?es

INSEE.29_000067684_A <- read.csv("C:/Users/Laurent/Downloads/
                                 INSEE-29_000067684_A.csv")
View(INSEE.29_000067684_A)

Visualiser les donn?es

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value)

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l")

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "b")

L?gendes

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l",xlab ="Dates" ,
     ylab="populations")